La Banque nationale agricole ou BNA est une banque étatique tunisienne.
Fondée le 1er juin 1959, elle a le statut de société anonyme dont le capital social se monte à 200 millions de dinars.
Histoire
À l’époque de sa création, l’agriculture tunisienne est financée par l’ancien système de crédit agricole constitué par la Caisse mutuelle de crédit agricole, la Caisse foncière et les Sociétés tunisiennes de prévoyance et adapté aux structures du protectorat.
C’est le président Habib Bourguiba qui lance véritablement ses activités le 10 octobre 1959. Après dix ans de croissance de son activité et son importante participation dans le développement économique du pays, au travers de l’ouverture de ses financements aux différents secteurs, l’institution prend le nom de Banque nationale de Tunisie (BNT).
La restructuration de la BNT et sa fusion avec la Banque nationale de développement agricole, le 24 juin 1989, redonnent à la banque sa dénomination initiale et unifient à nouveau les structures d’octroi du crédit agricole. Cette fusion constitue le début du processus de restructuration du système bancaire tunisien.
Après la révolution tunisienne de 2011, Jaafar Khattèche est nommé PDG de la banque, succédant à Mohamed Bichiou
Structure
La banque est structurée est composée d’une direction générale regroupant un président-directeur général, un directeur général adjoint et un secrétaire général auxquels sont rattachés treize directions centrales, un conseiller, des comités, un secrétariat permanent des marchés et une direction d’audit interne2. Par ailleurs, quinze directions régionales sont installées dans les chefs-lieux des gouvernorats2. Elle totalise 169 agences fin 2013.
Le groupe BNA comporte 18 filiales dont neuf sociétés financières et neuf actives dans divers secteurs d’activité : immobilier, agricole et services4. Elle a des relations de correspondance avec près de 800 banques réparties à travers les cinq continents. En France, elle a des relations avec Natixis, BNP Paribas, le Crédit agricole, HSBC, Crédit lyonnais et la Société générale.
J’effectue mon stage à l’agence BNA Nabeul.
J’ai choisi de travailler sur les crédits de cette année ( 1er janvier 2016 -2 aout 2016)
J’ai fait une collecte de données à partir des bases de données de l’agence. Ma base de données contient:
j’ai 173 individus
ID: un identifiant pour chaque client qui a eu un crédit ( pour la confidentialité )
Sexe: sexe du client
Montant: le montant du crédit
Nb_crédit: nombre de crédits qui ont été obtenu avant ce dernier ( ne sont pas nécessairement de même type )
Salaire: salaire du client
Age
catégorie_age: j’ai divisé les ages par intervalle :
. <35 : “1” : jeune 35<= . <50 :“2”: adulte . >= 50 :“3” : vieillard
Produit: Type de crédit , je l’ai codé , la BNA a plusieurs types crédits , mais seulement 9 ont été accordés pour cette année 1: " Crédit direct Aménagement" 2:“Crédit direct Dépenses courantes” 3: “FAREH” 4:" Crédit direct Aménagement logement hypothécaire " 5:" Malek Acquisition " 6:" Crédit direct Acquisition Logement" 7:" Crédit direct Construction " 8:" Crédit direct Achat terrain" 9:“MALEK Construction”
Importer la data set
bna <- read.csv2("C:/Users/yesmi/Desktop/dashboard/bna.csv", row.names=1)
head(bna)
## Montant Nb_crédit Age Produit Catégorie_age Sexe
## 1 2 5 63 1 3 F
## 2 12 4 63 1 3 F
## 3 13 2 66 1 3 H
## 4 6 3 64 1 3 H
## 5 4 3 62 1 3 H
## 6 20 3 61 1 3 F
## Profession Salaire
## 1 surveillant 912.243
## 2 enseignant 929.803
## 3 chef de relevé sonede 1614.113
## 4 employé au ministère de l'intérieur 919.604
## 5 professeur 1424.259
## 6 infirmier 994.608
summary(bna)
## Montant Nb_crédit Age Produit
## Min. : 1.00 Min. : 1.000 Min. :25.00 Min. :1.00
## 1st Qu.: 6.00 1st Qu.: 2.000 1st Qu.:46.00 1st Qu.:1.00
## Median : 12.00 Median : 3.000 Median :52.00 Median :1.00
## Mean : 14.62 Mean : 3.227 Mean :51.38 Mean :1.61
## 3rd Qu.: 20.00 3rd Qu.: 4.000 3rd Qu.:59.00 3rd Qu.:2.00
## Max. :150.00 Max. :11.000 Max. :68.00 Max. :9.00
## NA's :18
## Catégorie_age Sexe Profession Salaire
## Min. :1.000 F: 57 :24 Min. : 186.1
## 1st Qu.:2.000 H:115 retraité :13 1st Qu.: 632.3
## Median :3.000 enseignant :12 Median : 914.5
## Mean :2.571 fonctionnaire:12 Mean : 942.0
## 3rd Qu.:3.000 professeur :12 3rd Qu.:1205.7
## Max. :3.000 ouvrier : 8 Max. :3249.2
## NA's :18 (Other) :91 NA's :11
str(bna)
## 'data.frame': 172 obs. of 8 variables:
## $ Montant : num 2 12 13 6 4 20 16 22 27.5 18 ...
## $ Nb_crédit : int 5 4 2 3 3 3 4 3 4 4 ...
## $ Age : int 63 63 66 64 62 61 61 66 58 60 ...
## $ Produit : int 1 1 1 1 1 1 1 2 1 1 ...
## $ Catégorie_age: int 3 3 3 3 3 3 3 3 3 3 ...
## $ Sexe : Factor w/ 2 levels "F","H": 1 1 2 2 2 1 2 2 2 2 ...
## $ Profession : Factor w/ 72 levels "","agent","agent de police",..: 67 25 11 19 59 44 55 5 1 18 ...
## $ Salaire : num 912 930 1614 920 1424 ...
bna$Salaire=bna$Salaire*0.001
bna$Produit=as.factor(bna$Produit)
bna$Sexe=as.factor(bna$Sexe)
bna$Catégorie_age=as.factor(bna$Catégorie_age)
bna=bna[,-7]
head(bna)
## Montant Nb_crédit Age Produit Catégorie_age Sexe Salaire
## 1 2 5 63 1 3 F 0.912243
## 2 12 4 63 1 3 F 0.929803
## 3 13 2 66 1 3 H 1.614113
## 4 6 3 64 1 3 H 0.919604
## 5 4 3 62 1 3 H 1.424259
## 6 20 3 61 1 3 F 0.994608
Vérification et visualisation des valeurs manquantes
J’ai utilisé plusieurs librairies pour visualiser les valeurs manquantes et pour pouvoir par la suite rémédier à ce problème
sapply(bna,function(x) sum(is.na(x)) )
## Montant Nb_crédit Age Produit Catégorie_age
## 0 0 18 0 18
## Sexe Salaire
## 0 11
library(Rcpp)
library(Amelia)
## ##
## ## Amelia II: Multiple Imputation
## ## (Version 1.7.4, built: 2015-12-05)
## ## Copyright (C) 2005-2016 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
missmap(bna,main="missing values per variable",col = c("white","blue"))
library(VIM)
## Loading required package: colorspace
## Loading required package: grid
## Loading required package: data.table
## VIM is ready to use.
## Since version 4.0.0 the GUI is in its own package VIMGUI.
##
## Please use the package to use the new (and old) GUI.
## Suggestions and bug-reports can be submitted at: https://github.com/alexkowa/VIM/issues
##
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
##
## sleep
## Show cases with missing values
bna[!complete.cases(bna),]
## Montant Nb_crédit Age Produit Catégorie_age Sexe Salaire
## 12 5.0 3 NA 1 <NA> F 1.205730
## 15 3.5 3 NA 1 <NA> H 1.061682
## 17 15.0 6 NA 1 <NA> H 0.708718
## 33 5.5 3 NA 1 <NA> F 0.950585
## 69 10.0 1 NA 1 <NA> H 0.872198
## 86 7.0 1 NA 2 <NA> F 1.299135
## 103 80.0 3 NA 8 <NA> H NA
## 108 10.0 4 NA 1 <NA> H 0.524288
## 111 6.0 3 NA 1 <NA> F 0.261158
## 113 23.0 1 NA 1 <NA> F 0.208512
## 114 5.0 3 NA 2 <NA> F 0.814134
## 115 10.0 1 NA 1 <NA> F 0.924547
## 118 22.0 1 29 8 1 H NA
## 124 12.0 2 51 1 3 H NA
## 129 5.0 2 50 4 3 H NA
## 130 2.0 2 41 2 2 H NA
## 131 20.0 2 52 4 3 H NA
## 132 12.0 3 NA 1 <NA> H NA
## 138 15.0 2 58 1 3 H NA
## 146 150.0 1 52 9 3 H NA
## 165 8.0 2 48 4 2 F NA
## 168 18.0 1 NA 1 <NA> H 0.661424
## 169 7.0 1 NA 1 <NA> F 0.302706
## 170 13.0 1 NA 1 <NA> H 0.498935
## 171 5.0 1 NA 2 <NA> H NA
## 172 2.5 1 NA 2 <NA> H 0.186114
library(mice)
## mice 2.25 2015-11-09
md.pattern(bna)
## Montant Nb_crédit Produit Sexe Salaire Age Catégorie_age
## 146 1 1 1 1 1 1 1 0
## 8 1 1 1 1 0 1 1 1
## 15 1 1 1 1 1 0 0 2
## 3 1 1 1 1 0 0 0 3
## 0 0 0 0 11 18 18 47
aggr(bna, prop = F, numbers = T)
aggr(bna, prop = T, numbers = T)
## Matrix plot. Red for missing values, Darker values are high values.
matrixplot(bna, interactive = F)
## Margin plot. Red dots have at least one missing. No observation with two missing values here.
##marginplot(bna[,c("Salaire","Age")])
Comment rémédier à ce problème :
Pour les variables quantitatives : je propose qu’on remplace les valeurs manquantes par le mode/médiane/moyenne de chaque variable
bna$Age[is.na(bna$Age)]=round(mean(bna$Age[rev(is.na(bna$Age))]))
bna$Salaire[is.na(bna$Salaire)]=round(mean(bna$Salaire[rev(is.na(bna$Salaire))]))
Pour les variables qualitatives: on n’a qu’à remplacer les valeurs manquantes par le mode de la varibale
bna$Catégorie_age[is.na(bna$Catégorie_age)]=bna$Catégorie_age[which.max(bna$Catégorie_age[rev(is.na(bna$Catégorie_age))])]
| emarque : Solutions plus avancées : |
| lien source : http://www.theanalysisfactor.com/missing-data-two-recommended-solutions/) |
| eux méthodes pour traiter les données manquantes, de vastes améliorations par rapport aux approches traditionnelles sont devenues disponibles dans les logiciels statistiques courants au cours des dernières années. Les deux méthodes décrites ici exigent que les données manquent au hasard, sans rapport avec les valeurs manquantes. |
| ère méthode : IMPUTATION MULTIPLE (MI) : remplit des estimations pour les données manquantes. Mais pour saisir l’incertitude dans ces estimations, MI estime les valeurs à plusieurs reprises. Parce qu’il utilise une méthode d’imputation avec l’erreur intégrée, les estimations multiples devraient être similaires, mais pas identiques. |
| ème méthode : Estimation du maximum de vraisemblance : Cette méthode n’impute pas de données, mais utilise plutôt chaque cas, les données disponibles pour calculer les estimations du maximum de vraisemblance. L’estimation du maximum de vraisemblance d’un paramètre correspond à la valeur du paramètre qui est le plus susceptible d’avoir donné lieu à des données observées |
visualisation des histogrammes , la densité , les boxplots et le nuage de points
library(ggplot2)
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:graphics':
##
## layout
dev.off()
## null device
## 1
# Montant
plot_ly(bna,x=bna$Montant, type="box",boxpoints="all", jitter=0.4)
ggplot(bna, aes(x=bna$Montant)) + geom_histogram(aes(y=..density..), binwidth=.5, colour="black", fill="blue") + geom_density(alpha=.4, fill="#FF7667") +geom_vline(aes(xintercept=mean(bna$Montant, na.rm=T)), color="red", linetype="dashed", size=1)
#Nb_crédit
plot_ly(bna,x=bna$Nb_crédit, type="box",boxpoints="all", jitter=0.4)
ggplot(bna, aes(x=bna$Nb_crédit)) + geom_histogram(aes(y=..density..), binwidth=.5, colour="black", fill="blue") + geom_density(alpha=.4, fill="#FF7667") +geom_vline(aes(xintercept=mean(bna$Nb_crédit, na.rm=T)), color="red", linetype="dashed", size=1)
#Age
plot_ly(bna,x=bna$Age, type="box",boxpoints="all", jitter=0.4)
ggplot(bna, aes(x=bna$Age)) + geom_histogram(aes(y=..density..), binwidth=.5, colour="black", fill="blue") + geom_density(alpha=.4, fill="#FF7667") +geom_vline(aes(xintercept=mean(bna$Age, na.rm=T)), color="red", linetype="dashed", size=1)
#Salaire
ggplot(bna, aes(x=bna$Salaire)) + geom_histogram(aes(y=..density..), binwidth=.5, colour="black", fill="blue") + geom_density(alpha=.4, fill="#FF7667") +geom_vline(aes(xintercept=mean(bna$Salaire, na.rm=T)), color="red", linetype="dashed", size=1)
#comparaison
plot.multi.dens <- function(s)
{
junk.x = NULL
junk.y = NULL
for(i in 1:length(s)) {
junk.x = c(junk.x, density(s[[i]])$x)
junk.y = c(junk.y, density(s[[i]])$y)
}
xr <- range(junk.x)
yr <- range(junk.y)
plot(density(s[[1]]), xlim = xr, ylim = yr, main = "")
for(i in 1:length(s)) {
lines(density(s[[i]]), xlim = xr, ylim = yr, col = i)
}
}
# the input of the following function MUST be a numeric list
plot.multi.dens( list(bna$Age,bna$Salaire))
plot.multi.dens( list(bna$Salaire,bna$Montant))
library(ggplot2)
library(plotly)
table(bna$Sexe)
##
## F H
## 57 115
p1=plot_ly(bna, labels = c("Femme","Homme"), values = table(bna$Sexe), type = "pie")
p2=layout(p1, title = "Sexe ")
p2
table(bna$Catégorie_age)
##
## 1 2 3
## 9 48 115
p3=plot_ly(bna, labels = c("Jeune(. <35)","Adulte(35=<.<50)","Vieillard(>=50"), values = table(bna$Catégorie_age), type = "pie")
p4=layout(p3, title = "Catégorie d'age des clients ayant des crédits")
p4
table(bna$Produit)
##
## 1 2 3 4 5 6 7 8 9
## 124 30 3 7 1 2 2 2 1
p5=plot_ly(bna, labels = c("Crédit direct Aménagement", "Crédit direct Dépenses courantes", "FAREH","Crédit direct Aménagement logement hypothécaire ",
"Malek Acquisition ",
"Crédit direct Acquisition Logement","Crédit direct Construction "," Crédit direct Achat terrain","MALEK Construction"), values = table(bna$Produit), type = "pie")
p6=layout(p5, title = "Produits ")
p6
library(rbokeh)
library(ggplot2)
tools <- c("pan", "wheel_zoom", "box_zoom", "box_select", "reset")
nms <- expand.grid(names(bna)[c(1:3,7)], rev(names(bna)[c(1:3,7)]), stringsAsFactors = FALSE)
splom_list <- vector("list", 4)
for(ii in seq_len(nrow(nms))) {
splom_list[[ii]] <- figure(width = 300, height = 300, tools = tools,
xlab = nms$Var1[ii], ylab = nms$Var2[ii]) %>%
ly_points(nms$Var1[ii], nms$Var2[ii], data = bna,
color = Sexe, size = 6, legend = FALSE)
}
grid_plot(splom_list, ncol = 4, same_axes = TRUE, link_data = TRUE)
tools <- c("pan", "wheel_zoom", "box_zoom", "box_select", "reset")
nms <- expand.grid(names(bna)[c(1:3,7)], rev(names(bna)[1:3]), stringsAsFactors = FALSE)
splom_list <- vector("list", 16)
for(ii in seq_len(nrow(nms))) {
splom_list[[ii]] <- figure(width = 300, height = 300, tools = tools,
xlab = nms$Var1[ii], ylab = nms$Var2[ii]) %>%
ly_points(nms$Var1[ii], nms$Var2[ii], data = bna,
color = Catégorie_age, size = 6, legend = FALSE)
}
grid_plot(splom_list, ncol = 4, same_axes = TRUE, link_data = TRUE)
tools <- c("pan", "wheel_zoom", "box_zoom", "box_select", "reset")
nms <- expand.grid(names(bna)[c(1:3,7)], rev(names(bna)[c(1:3,7)]), stringsAsFactors = FALSE)
splom_list <- vector("list", 16)
for(ii in seq_len(nrow(nms))) {
splom_list[[ii]] <- figure(width = 400, height = 400, tools = tools,
xlab = nms$Var1[ii], ylab = nms$Var2[ii]) %>%
ly_points(nms$Var1[ii], nms$Var2[ii], data = bna,
color = Produit, size = 6, legend = FALSE)
}
grid_plot(splom_list, ncol = 4, same_axes = TRUE, link_data = TRUE)
#Salaire en foction d'age (catégorie d'age)
figure(legend_location = "top_left") %>%
ly_quantile(Salaire, group = Catégorie_age, data = bna)
e<- figure() %>%
ly_points(Age, Salaire, data = bna,
color = Catégorie_age, glyph =Catégorie_age,
hover = list(Age, Salaire))
e
#Salaire en foction d'age (sexe)
k<- figure() %>%
ly_points(Age, Salaire, data = bna,
color = Sexe, glyph =Sexe,
hover = list(Age, Salaire))
k
#Salaire en foction d'age (produit)
l<- figure() %>%
ly_points(Age, Salaire, data = bna,
color = Produit, glyph =Produit,
hover = list(Age, Salaire))
l
#Salaire en foction d'age (catégorie d'age)
e<- figure() %>%
ly_points(Age, Salaire, data = bna,
color = Catégorie_age, glyph =Catégorie_age,
hover = list(Age, Salaire))
e
#Salaire en foction de bn credit (catégorie d'age)
m<- figure() %>%
ly_points(Nb_crédit, Salaire, data = bna,
color = Catégorie_age, glyph =Catégorie_age,
hover = list(Age, Salaire))
m
#Salaire en foction de bn credit (sexe)
n<- figure() %>%
ly_points(Nb_crédit, Salaire, data = bna,
color =Sexe, glyph =Sexe,
hover = list(Age, Salaire))
n
#Salaire en foction de nb credit (Produit)
o<- figure() %>%
ly_points(Nb_crédit, Salaire, data = bna,
color =Produit, glyph =Produit,
hover = list(Age, Salaire))
o
#nombre de crédits en fonction de l'age ( catégorie d'age)
p<- figure() %>%
ly_points(Age,Nb_crédit, data = bna,
color =Catégorie_age, glyph =Catégorie_age,
hover = list(Age, Salaire))
p
#nombre de crédits en fonction de l'age ( sexe)
q<- figure() %>%
ly_points(Age,Nb_crédit, data = bna,
color =Sexe, glyph =Sexe,
hover = list(Age, Salaire))
q
#nombre de crédits en fonction de l'age ( Produit)
r<- figure() %>%
ly_points(Age,Nb_crédit, data = bna,
color =Produit, glyph =Produit,
hover = list(Age, Salaire))
r
# Monatant en fonction d'age ( catégorie d'age )
a <- figure() %>%
ly_points(Age, Montant, data = bna,
color = Catégorie_age, glyph =Catégorie_age ,
hover = list(Age, Montant))
a
figure(ylab = "Montant(Sexe)", width = 600) %>%
ly_boxplot(Sexe, Montant, data = bna)
figure(ylab = "Montant( Produit)", width = 600) %>%
ly_boxplot(Produit, Montant, data = bna)
figure(ylab = "Montant(Catégorie_age)", width = 600) %>%
ly_boxplot(Catégorie_age, Montant, data = bna)
# Montant en fontion de Nombre de crédits déja pris ( Catégorie d'age )
b<- figure() %>%
ly_points(Nb_crédit, Montant, data = bna,
color = Catégorie_age, glyph =Catégorie_age ,
hover = list(Nb_crédit, Montant))
b
figure(legend_location = "top_left") %>%
ly_quantile(Nb_crédit, group = Catégorie_age, data = bna)
figure(legend_location = "top_left") %>%
ly_quantile(Montant, group = Produit, data = bna)
figure(ylab = "Nb_crédit(Sexe)", width = 600) %>%
ly_boxplot(Sexe, Nb_crédit, data = bna,color=c("red","blue"))
figure(ylab = " Nb_crédit(Catégorie_age)", width = 600) %>%
ly_boxplot(Catégorie_age, Nb_crédit, data = bna)
figure(ylab = "Nb_crédit( Produit)", width = 600) %>%
ly_boxplot(Produit, Nb_crédit, data = bna)
# Montant en fontion de Nombre de crédits déja pris ( sexe )
c<- figure() %>%
ly_points(Nb_crédit, Montant, data = bna,
color = Sexe, glyph =Sexe ,
hover = list(Nb_crédit, Montant))
c
figure(legend_location = "top_left") %>%
ly_quantile(Nb_crédit, group = Sexe, data = bna)
figure(legend_location = "top_left") %>%
ly_quantile(Montant, group = Produit, data = bna)
# Montant en fontion de Nombre de crédits déja pris (Produit)
d<- figure() %>%
ly_points(Nb_crédit, Montant, data = bna,
color = Produit, glyph =Produit ,
hover = list(Nb_crédit, Montant))
d
#Montant en fonction des Salaires (sexe)
f<- figure() %>%
ly_points(Salaire, Montant, data = bna,
color = Sexe, glyph =Sexe ,
hover = list(Salaire, Montant))
f
#Montant en foction des salaires ( produit)
g<- figure() %>%
ly_points(Salaire, Montant, data = bna,
color = Produit, glyph =Produit ,
hover = list(Salaire, Montant))
g
#Montant en foction des salaires ( Catégorie d'age)
h<- figure() %>%
ly_points(Salaire, Montant, data = bna,
color = Catégorie_age, glyph =Catégorie_age,
hover = list(Salaire, Montant))
h